﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Diagnostics;
using RouterControl.IO.UPnP;

namespace RouterControlTest
{
	/// <summary>
	/// Summary description for DeviceFinderTest
	/// </summary>
	[TestClass]
	public class DeviceFinderTest
	{
		public DeviceFinderTest()
		{
			//
			// TODO: Add constructor logic here
			//
		}

		private TestContext testContextInstance;

		/// <summary>
		///Gets or sets the test context which provides
		///information about and functionality for the current test run.
		///</summary>
		public TestContext TestContext
		{
			get
			{
				return testContextInstance;
			}
			set
			{
				testContextInstance = value;
			}
		}

		#region Additional test attributes
		//
		// You can use the following additional attributes as you write your tests:
		//
		// Use ClassInitialize to run code before running the first test in the class
		// [ClassInitialize()]
		// public static void MyClassInitialize(TestContext testContext) { }
		//
		// Use ClassCleanup to run code after all tests in a class have run
		// [ClassCleanup()]
		// public static void MyClassCleanup() { }
		//
		// Use TestInitialize to run code before running each test 
		// [TestInitialize()]
		// public void MyTestInitialize() { }
		//
		// Use TestCleanup to run code after each test has run
		// [TestCleanup()]
		// public void MyTestCleanup() { }
		//
		#endregion

		[TestMethod]
		public void FindNative()
		{
			var finder = new UPnPDeviceFinderClass();

			var devices = finder.FindByType(RouterControl.IO.RootDeviceTypeIds.InternetGatewayDeviceType, 0);

			Assert.IsTrue(devices.Count > 0, "no devices found");

			foreach (IUPnPDevice d in devices)
			{
				var ds = new RouterControl.IO.DeviceSchema(d);

				ds.DownloadDeviceDescription();

				Console.WriteLine(ds.ToXml());
				Console.WriteLine(ds.GetDeviceSchemaDom().ToXml());
			}

		}

		[TestMethod]
		public void Find()
		{
			var finder = new RouterControl.IO.DeviceFinder();

			var devices = finder.FindInternetGateway();

			Assert.IsTrue(devices.Count > 0, "no devices found");

			foreach (var d in devices)
			{
				// dump
				Console.WriteLine(d.GetSchema().ToXml());

				// ensure everything is accessible
				var r = d.RootDevice;
				var c = d.Children;
			}

			// find again for running into multiple
			// services in the same app domain
			var devices2 = finder.FindInternetGateway();
		}
	}
}
